#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>

int main()
{
    // // 以只读方式打开一个文件
    // int fd = open("a.txt", O_RDWR);

    // // 申请一块大小为1024字节的映射内存，并将之与文件fd相关联
    // // NULL: 由Linux负责分配映射内存，该参数必须是NULL
    // // 1024: 映射内存的大小
    // // PROT_READ|PROT_WRITE: 读写模式，必须是文件打开模式的子集
    // // MAP_SHARED: 对内存的操作立即反应到文件中
    // // fd: 内存映射的文件
    // // 0: 一般直接写0
    // char *p = mmap(NULL, 1024, PROT_READ|PROT_WRITE,
    //             MAP_SHARED, fd, 0);

    // // 将该映射内存的内容打印出来（即其相关联文件fd的内容）
    // printf("%s\n", p);

    // // 通过操作内存，间接修改了文件内容
    // p[0] = 'x';
    // printf("%s\n", p);
    
    // // 解除映射
    // munmap(p, 1024);


    int lcd = open("/dev/fb0", O_RDWR);
    if(lcd == -1)
    {
        perror("打开LCD设备失败");
        exit(0);
    }

    char *p = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE,
                   MAP_SHARED, lcd, 0);
    if(p == MAP_FAILED)
    {
        perror("内存映射失败");
        exit(0);
    }

    while(1)
    {
        memset(p, 0xFFFFFFFF, 800*480*4); // 白屏
        sleep(1);
        memset(p, 0x00000000, 800*480*4); // 黑屏
        sleep(1);
    }

    return 0;
}